<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Building libpq Programs</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REV="MADE"
HREF="mailto:pgsql-docs@postgresql.org"><LINK
REL="HOME"
TITLE="PostgreSQL 9.1.2 Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="libpq - C Library"
HREF="libpq.html"><LINK
REL="PREVIOUS"
TITLE="Behavior in Threaded Programs"
HREF="libpq-threading.html"><LINK
REL="NEXT"
TITLE="Example Programs"
HREF="libpq-example.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="stylesheet.css"><META
HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=ISO-8859-1"><META
NAME="creation"
CONTENT="2011-12-01T22:07:59"></HEAD
><BODY
CLASS="SECT1"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="5"
ALIGN="center"
VALIGN="bottom"
><A
HREF="index.html"
>PostgreSQL 9.1.2 Documentation</A
></TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
TITLE="Behavior in Threaded Programs"
HREF="libpq-threading.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="libpq.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="60%"
ALIGN="center"
VALIGN="bottom"
>Chapter 31. <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> - C Library</TD
><TD
WIDTH="20%"
ALIGN="right"
VALIGN="top"
><A
TITLE="Example Programs"
HREF="libpq-example.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="LIBPQ-BUILD"
>31.19. Building <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> Programs</A
></H1
><P
>   To build (i.e., compile and link) a program using
   <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> you need to do all of the following
   things:

   <P
></P
></P><UL
><LI
><P
>      Include the <TT
CLASS="FILENAME"
>libpq-fe.h</TT
> header file:
</P><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libpq-fe.h&gt;</PRE
><P>
      If you failed to do that then you will normally get error messages
      from your compiler similar to:
</P><PRE
CLASS="SCREEN"
>foo.c: In function `main':
foo.c:34: `PGconn' undeclared (first use in this function)
foo.c:35: `PGresult' undeclared (first use in this function)
foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)</PRE
><P>
     </P
></LI
><LI
><P
>      Point your compiler to the directory where the <SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> header
      files were installed, by supplying the
      <TT
CLASS="LITERAL"
>-I<TT
CLASS="REPLACEABLE"
><I
>directory</I
></TT
></TT
> option
      to your compiler.  (In some cases the compiler will look into
      the directory in question by default, so you can omit this
      option.)  For instance, your compile command line could look
      like:
</P><PRE
CLASS="PROGRAMLISTING"
>cc -c -I/usr/local/pgsql/include testprog.c</PRE
><P>
      If you are using makefiles then add the option to the
      <TT
CLASS="VARNAME"
>CPPFLAGS</TT
> variable:
</P><PRE
CLASS="PROGRAMLISTING"
>CPPFLAGS += -I/usr/local/pgsql/include</PRE
><P>
     </P
><P
>      If there is any chance that your program might be compiled by
      other users then you should not hardcode the directory location
      like that.  Instead, you can run the utility
      <TT
CLASS="COMMAND"
>pg_config</TT
> to find out where the header
      files are on the local system:
</P><PRE
CLASS="SCREEN"
><SAMP
CLASS="PROMPT"
>$</SAMP
> pg_config --includedir
<SAMP
CLASS="COMPUTEROUTPUT"
>/usr/local/include</SAMP
></PRE
><P>
     </P
><P
>      Failure to specify the correct option to the compiler will
      result in an error message such as:
</P><PRE
CLASS="SCREEN"
>testlibpq.c:8:22: libpq-fe.h: No such file or directory</PRE
><P>
     </P
></LI
><LI
><P
>      When linking the final program, specify the option
      <TT
CLASS="LITERAL"
>-lpq</TT
> so that the <SPAN
CLASS="APPLICATION"
>libpq</SPAN
>
      library gets pulled in, as well as the option
      <TT
CLASS="LITERAL"
>-L<TT
CLASS="REPLACEABLE"
><I
>directory</I
></TT
></TT
> to point
      the compiler to the directory where the
      <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> library resides.  (Again, the
      compiler will search some directories by default.)  For maximum
      portability, put the <TT
CLASS="OPTION"
>-L</TT
> option before the
      <TT
CLASS="OPTION"
>-lpq</TT
> option.  For example:
</P><PRE
CLASS="PROGRAMLISTING"
>cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq</PRE
><P>
     </P
><P
>      You can find out the library directory using
      <TT
CLASS="COMMAND"
>pg_config</TT
> as well:
</P><PRE
CLASS="SCREEN"
><SAMP
CLASS="PROMPT"
>$</SAMP
> pg_config --libdir
<SAMP
CLASS="COMPUTEROUTPUT"
>/usr/local/pgsql/lib</SAMP
></PRE
><P>
     </P
><P
>      Error messages that point to problems in this area could look like
      the following:
</P><PRE
CLASS="SCREEN"
>testlibpq.o: In function `main':
testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
testlibpq.o(.text+0x71): undefined reference to `PQstatus'
testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'</PRE
><P>
      This means you forgot <TT
CLASS="OPTION"
>-lpq</TT
>.
</P><PRE
CLASS="SCREEN"
>/usr/bin/ld: cannot find -lpq</PRE
><P>
      This means you forgot the <TT
CLASS="OPTION"
>-L</TT
> option or did not
      specify the right directory.
     </P
></LI
></UL
><P>
  </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="libpq-threading.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="libpq-example.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Behavior in Threaded Programs</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="libpq.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Example Programs</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>